Tarea consultas base de datos desde python#

Crear la tabla nombrada: employees#

import psycopg2
from psycopg2 import Error

# Definir la conexión
try:
    connection = psycopg2.connect(user="myname_user",
                                  password="password",
                                  host="localhost",
                                  port="5432",
                                  database="myname_db")

    cursor = connection.cursor()

    # Comandos SQL para crear la tabla y los índices
    create_table_query = '''CREATE TABLE employees
                            (employee_id SERIAL PRIMARY KEY,
                             first_name VARCHAR(20),
                             last_name VARCHAR(25),
                             email VARCHAR(25),
                             phone_number VARCHAR(20),
                             hire_date DATE,
                             job_id VARCHAR(10),
                             salary NUMERIC(8,2),
                             commission_pct NUMERIC(2,2),
                             manager_id INTEGER,
                             department_id INTEGER);'''

    create_unique_index_query = '''CREATE UNIQUE INDEX emp_emp_id_pk
                                   ON employees (employee_id);'''

    # Ejecutar los comandos SQL
    cursor.execute(create_table_query)
    cursor.execute(create_unique_index_query)

    # Confirmar los cambios
    connection.commit()
    print("Tabla y índices creados exitosamente")

except (Exception, Error) as error:
    print("Error al ejecutar los comandos SQL:", error)
finally:
    if connection:
        cursor.close()
        connection.close()
        print("Conexión PostgreSQL cerrada")
Error al ejecutar los comandos SQL: relation "employees" already exists

Conexión PostgreSQL cerrada
import psycopg2
from psycopg2 import Error

try:
    # Establecer conexión con la base de datos
    connection = psycopg2.connect(user="myname_user",
                                  password="password",
                                  host="localhost",
                                  port="5432",
                                  database="myname_db")

    cursor = connection.cursor()

    # Consulta para seleccionar las primeras 10 filas de la tabla employees
    select_query = '''SELECT * FROM employees LIMIT 10;'''
    
    # Ejecutar la consulta y gurdar los resultados en el objeto "records"
    cursor.execute(select_query)
    records = cursor.fetchall()
    
    print("Primeras 10 filas de la tabla employees:")
    for row in records:
        print(row)

    # Consulta para contar el número total de filas en la tabla employees
    count_query = '''SELECT count(1) FROM employees;'''

    # Ejecutar la consulta de conteo
    cursor.execute(count_query)
    # guardar el resultado en el objeto count
    count = cursor.fetchone()[0]

    print("\nTotal de filas en la tabla employees:", count)

except (Exception, Error) as error:
    print("Error al ejecutar las consultas SQL:", error)
finally:
    if connection:
        cursor.close()
        connection.close()
        print("Conexión PostgreSQL cerrada")
Primeras 10 filas de la tabla employees:

Total de filas en la tabla employees: 0
Conexión PostgreSQL cerrada

crear la tabla courses#

import psycopg2
from psycopg2 import Error

try:
    # Establecer la conexión con la base de datos
    connection = psycopg2.connect(user="myname_user",
                                  password="password",
                                  host="localhost",
                                  port="5432",
                                  database="myname_db")

    cursor = connection.cursor()

    # Comando SQL para crear la tabla courses
    create_table_query = '''CREATE TABLE courses
                            (course_id SERIAL PRIMARY KEY,
                             course_name VARCHAR(60),
                             course_author VARCHAR(40),
                             course_status VARCHAR(10) CHECK (course_status IN ('published', 'draft', 'inactive')),
                             course_published_dt DATE);'''

    # Ejecutar el comando SQL
    cursor.execute(create_table_query)
    connection.commit()
    print("Tabla 'courses' creada exitosamente")

except (Exception, Error) as error:
    print("Error al ejecutar el comando SQL:", error)
finally:
    if connection:
        cursor.close()
        connection.close()
        print("Conexión PostgreSQL cerrada")
Error al ejecutar el comando SQL: relation "courses" already exists

Conexión PostgreSQL cerrada

Insertar datos a tabla Courses#

import psycopg2
from psycopg2 import Error

try:
    # Establecer la conexión con la base de datos
    connection = psycopg2.connect(user="myname_user",
                                  password="password",
                                  host="localhost",
                                  port="5432",
                                  database="myname_db")

    cursor = connection.cursor()

    # Datos a insertar
    data = [
        ("Programming using Python", "Bob Dillon", "published", "2020-09-30"),
        ("Data Engineering using Python", "Bob Dillon", "published", "2020-07-15"),
        ("Data Engineering using Scala", "Elvis Presley", "draft", None),
        ("Programming using Scala", "Elvis Presley", "published", "2020-05-12"),
        ("Programming using Java", "Mike Jack", "inactive", "2020-08-10"),
        ("Web Applications - Python Flask", "Bob Dillon", "inactive", "2020-07-20"),
        ("Web Applications - Java Spring", "Mike Jack", "draft", None),
        ("Pipeline Orchestration - Python", "Bob Dillon", "draft", None),
        ("Streaming Pipelines - Python", "Bob Dillon", "published", "2020-10-05"),
        ("Web Applications - Scala Play", "Elvis Presley", "inactive", "2020-09-30"),
        ("Web Applications - Python Django", "Bob Dillon", "published", "2020-06-23"),
        ("Server Automation - Ansible", "Uncle Sam", "published", "2020-07-05")
    ]

    # Insertar los datos en la tabla
    for row in data:
        # Comando SQL para insertar datos en la tabla courses
        insert_query = '''INSERT INTO courses (course_name, course_author, course_status, course_published_dt)
                          VALUES (%s, %s, %s, %s);'''
        # Insertar los datos de cada fila en la tabla
        cursor.execute(insert_query, row)

    # Confirmar los cambios
    connection.commit()
    print("Datos insertados en la tabla 'courses' exitosamente")

except (Exception, Error) as error:
    print("Error al insertar datos en la tabla 'courses':", error)
finally:
    if connection:
        cursor.close()
        connection.close()
        print("Conexión PostgreSQL cerrada")
Datos insertados en la tabla 'courses' exitosamente
Conexión PostgreSQL cerrada

Borre todos los cursos que no estén en modo borrador ni publicados. Proporcione la sentencia de borrado como respuesta para este ejercicio en el Jupyter Book. Para validar, obtenga el recuento de todos los cursos publicados por autor y asegúrese de que la salida está ordenada en forma descendente por recuento.#

import psycopg2
try:
    # Establecer la conexión con la base de datos
    connection = psycopg2.connect(user="myname_user",
                                  password="password",
                                  host="localhost",
                                  port="5432",
                                  database="myname_db")
    cursor = connection.cursor()
    print("Conexión exitosa a PostgreSQL")

    # Sentencia de borrado
    delete_query = "DELETE FROM courses WHERE course_status NOT IN ('draft', 'published');"
    cursor.execute(delete_query)
    connection.commit()
    print("Cursos eliminados exitosamente")

    # Consulta para obtener el recuento de cursos publicados por autor
    select_query = '''
        SELECT course_author, COUNT(*) AS count_published_courses
        FROM courses
        WHERE course_status = 'published'
        GROUP BY course_author
        ORDER BY count_published_courses DESC;
    '''
    cursor.execute(select_query)
    records = cursor.fetchall()
    print("Recuento de cursos publicados por autor:")
    for row in records:
        print("Autor:", row[0], "- Cursos publicados:", row[1])

except (Exception, psycopg2.Error) as error:
    print("Error:", error)

finally:
    if connection:
        cursor.close()
        connection.close()
        print("Conexión PostgreSQL cerrada")
Conexión exitosa a PostgreSQL
Cursos eliminados exitosamente
Recuento de cursos publicados por autor:
Autor: Bob Dillon - Cursos publicados: 64
Autor: Uncle Sam - Cursos publicados: 16
Autor: Elvis Presley - Cursos publicados: 16
Conexión PostgreSQL cerrada

Crear la base de datos users#

import psycopg2
from psycopg2 import Error

try:
    # Establecer la conexión con la base de datos
    connection = psycopg2.connect(user="myname_user",
                                  password="password",
                                  host="localhost",
                                  port="5432",
                                  database="myname_db")
    cursor = connection.cursor()
    print("Conexión exitosa a PostgreSQL")

    # Crear la tabla users si no existe
    create_table_query = '''
        CREATE TABLE IF NOT EXISTS users (
            user_id SERIAL PRIMARY KEY,
            user_first_name VARCHAR(30),
            user_last_name VARCHAR(30),
            user_email_id VARCHAR(50),
            user_gender VARCHAR(1),
            user_unique_id VARCHAR(15),
            user_phone_no VARCHAR(20),
            user_dob DATE,
            created_ts TIMESTAMP
        );
    '''
    cursor.execute(create_table_query)
    connection.commit()
    print("Tabla 'users' creada exitosamente")

except (Exception, psycopg2.Error) as error:
    print("Error al conectar a PostgreSQL:", error)

finally:
    if connection:
        cursor.close()
        connection.close()
        print("Conexión PostgreSQL cerrada")
Conexión exitosa a PostgreSQL
Tabla 'users' creada exitosamente
Conexión PostgreSQL cerrada

Insertar los valores en la anterior tabla#

import psycopg2
from psycopg2 import Error

try:
    # Establecer la conexión con la base de datos
    connection = psycopg2.connect(user="myname_user",
                                  password="password",
                                  host="localhost",
                                  port="5432",
                                  database="myname_db")
    cursor = connection.cursor()
    print("Conexión exitosa a PostgreSQL")

    # Consulta de inserción
    insert_query = """
    INSERT INTO users (
        user_first_name, user_last_name, user_email_id, user_gender, 
        user_unique_id, user_phone_no, user_dob, created_ts
    ) VALUES (%s, %s, %s, %s, %s, %s, %s, %s);
    """

    # Datos a insertar
    data_to_insert = [
        ('Giuseppe', 'Bode', 'gbode0@imgur.com', 'M', '88833-8759', '+86 (764) 443-1967', '1973-05-31', '2018-04-15 12:13:38'),
        ('Lexy', 'Gisbey', 'lgisbey1@mail.ru', 'F', '262501-029', '+86 (751) 160-3742', '2003-05-31', '2020-12-29 06:44:09'),
        ('Karel', 'Claringbold', 'kclaringbold2@yale.edu', 'F', '391-33-2823', '+62 (445) 471-2682', '1985-11-28', '2018-11-19 00:04:08'),
        ('Marv', 'Tanswill', 'mtanswill3@dedecms.com', 'F', '1195413-80', '+62 (497) 736-6802', '1998-05-24', '2018-11-19 16:29:43'),
        ('Gertie', 'Espinoza', 'gespinoza4@nationalgeographic.com', 'M', '471-24-6869', '+249 (687) 506-2960', '1997-10-30', '2020-01-25 21:31:10'),
        ('Saleem', 'Danneil', 'sdanneil5@guardian.co.uk', 'F', '192374-933', '+63 (810) 321-0331', '1992-03-08', '2020-11-07 19:01:14'),
        ('Rickert', 'O''Shiels', 'roshiels6@wikispaces.com', 'M', '749-27-47-52', '+86 (184) 759-3933', '1972-11-01', '2018-03-20 10:53:24'),
        ('Cybil', 'Lissimore', 'clissimore7@pinterest.com', 'M', '461-75-4198', '+54 (613) 939-6976', '1978-03-03', '2019-12-09 14:08:30'),
        ('Melita', 'Rimington', 'mrimington8@mozilla.org', 'F', '892-36-676-2', '+48 (322) 829-8638', '1995-12-15', '2018-04-03 04:21:33'),
        ('Benetta', 'Nana', 'bnana9@google.com', 'M', '197-54-1646', '+420 (934) 611-0020', '1971-12-07', '2018-10-17 21:02:51'),
        ('Gregorius', 'Gullane', 'ggullanea@prnewswire.com', 'F', '232-55-52-58', '+62 (780) 859-1578', '1973-09-18', '2020-01-14 23:38:53'),
        ('Una', 'Glayzer', 'uglayzerb@pinterest.com', 'M', '898-84-336-6', '+380 (840) 437-3981', '1983-05-26', '2019-09-17 03:24:21'),
        ('Jamie', 'Vosper', 'jvosperc@umich.edu', 'M', '247-95-68-44', '+81 (205) 723-1942', '1972-03-18', '2020-07-23 16:39:33'),
        ('Calley', 'Tilson', 'ctilsond@issuu.com', 'F', '415-48-894-3', '+229 (698) 777-4904', '1987-06-12', '2020-06-05 12:10:50'),
        ('Peadar', 'Gregorowicz', 'pgregorowicze@omniture.com', 'M', '403-39-5-869', '+7 (267) 853-3262', '1996-09-21', '2018-05-29 23:51:31'),
        ('Jeanie', 'Webling', 'jweblingf@booking.com', 'F', '399-83-05-03', '+351 (684) 413-0550', '1994-12-27', '2018-02-09 01:31:11'),
        ('Yankee', 'Jelf', 'yjelfg@wufoo.com', 'F', '607-99-0411', '+1 (864) 112-7432', '1988-11-13', '2019-09-16 16:09:12'),
        ('Blair', 'Aumerle', 'baumerleh@toplist.cz', 'F', '430-01-578-5', '+7 (393) 232-1860', '1979-11-09', '2018-10-28 19:25:35'),
        ('Pavlov', 'Steljes', 'psteljesi@macromedia.com', 'F', '571-09-6181', '+598 (877) 881-3236', '1991-06-24', '2020-09-18 05:34:31'),
        ('Darn', 'Hadeke', 'dhadekej@last.fm', 'M', '478-32-02-87', '+370 (347) 110-4270', '1984-09-04', '2018-02-10 12:56:00'),
        ('Wendell', 'Spanton', 'wspantonk@de.vu', 'F', None, '+84 (301) 762-1316', '1973-07-24', '2018-01-30 01:20:11'),
        ('Carlo', 'Yearby', 'cyearbyl@comcast.net', 'F', None, '+55 (288) 623-4067', '1974-11-11', '2018-06-24 03:18:40'),
        ('Sheila', 'Evitts', 'sevittsm@webmd.com', None, '830-40-5287', None, '1977-03-01', '2020-07-20 09:59:41'),
        ('Sianna', 'Lowdham', 'slowdhamn@stanford.edu', None, '778-0845', None, '1985-12-23', '2018-06-29 02:42:49'),
        ('Phylys', 'Aslie', 'paslieo@qq.com', 'M', '368-44-4478', '+86 (765) 152-8654', '1984-03-22', '2019-10-01 01:34:28')
    ]

    # Ejecutar la consulta de inserción
    cursor.executemany(insert_query, data_to_insert)
    connection.commit()
    print("Datos insertados exitosamente en la tabla 'users'")

except (Exception, psycopg2.Error) as error:
    print("Error al conectar a PostgreSQL:", error)

finally:
    if connection:
        cursor.close()
        connection.close()
        print("Conexión PostgreSQL cerrada")
Conexión exitosa a PostgreSQL
Datos insertados exitosamente en la tabla 'users'
Conexión PostgreSQL cerrada

Obtenga el número de usuarios creados por año. Utilice la tabla de usuarios para este ejercicio.#

import psycopg2
from psycopg2 import Error

try:
    # Establecer la conexión con la base de datos
    connection = psycopg2.connect(user="myname_user",
                                  password="password",
                                  host="localhost",
                                  port="5432",
                                  database="myname_db")
    cursor = connection.cursor()

    # Consulta SQL
    sql_query = """
    SELECT DATE_TRUNC('year', created_ts) AS created_year,
           COUNT(*) AS user_count
    FROM users
    GROUP BY created_year
    ORDER BY created_year ASC;
    """

    # Ejecutar la consulta
    cursor.execute(sql_query)

    # Obtener los resultados
    results = cursor.fetchall()

    # Imprimir los resultados
    print("Año de creación\t\tNúmero de usuarios")
    print("-----------------------------------------")
    for row in results:
        print(f"{row[0].strftime('%Y')}\t\t\t{row[1]}")

except (Exception, psycopg2.Error) as error:
    print("Error al conectar a PostgreSQL:", error)

finally:
    if connection:
        cursor.close()
        connection.close()
        print("Conexión PostgreSQL cerrada")
Año de creación		Número de usuarios
-----------------------------------------
2018			208
2019			64
2020			128
Conexión PostgreSQL cerrada

Obtenga los días de nacimiento de todos los usuarios nacidos en el mes May.#

import psycopg2
from psycopg2 import Error

try:
    # Establecer la conexión con la base de datos
    connection = psycopg2.connect(user="myname_user",
                                  password="password",
                                  host="localhost",
                                  port="5432",
                                  database="myname_db")
    cursor = connection.cursor()

    # Consulta SQL
    sql_query = """
    SELECT user_id,
           user_dob,
           user_email_id,
           TO_CHAR(user_dob, 'FMDay') AS user_day_of_birth
    FROM users
    WHERE EXTRACT(MONTH FROM user_dob) = 5
    ORDER BY EXTRACT(DAY FROM user_dob);
    """

    # Ejecutar la consulta
    cursor.execute(sql_query)

    # Obtener los resultados
    results = cursor.fetchall()

    # Imprimir los resultados
    print("ID de Usuario\t\tFecha de Nacimiento\t\tCorreo Electrónico\t\tDía de Nacimiento")
    print("-----------------------------------------------------------------------------------------------")
    for row in results:
        print(f"{row[0]}\t\t{row[1]}\t{row[2]}\t{row[3]}")

except (Exception, psycopg2.Error) as error:
    print("Error al conectar a PostgreSQL:", error)

finally:
    if connection:
        cursor.close()
        connection.close()
        print("Conexión PostgreSQL cerrada")
ID de Usuario		Fecha de Nacimiento		Correo Electrónico		Día de Nacimiento
-----------------------------------------------------------------------------------------------
4		1998-05-24	mtanswill3@dedecms.com	Sunday
204		1998-05-24	mtanswill3@dedecms.com	Sunday
104		1998-05-24	mtanswill3@dedecms.com	Sunday
229		1998-05-24	mtanswill3@dedecms.com	Sunday
54		1998-05-24	mtanswill3@dedecms.com	Sunday
254		1998-05-24	mtanswill3@dedecms.com	Sunday
129		1998-05-24	mtanswill3@dedecms.com	Sunday
279		1998-05-24	mtanswill3@dedecms.com	Sunday
29		1998-05-24	mtanswill3@dedecms.com	Sunday
304		1998-05-24	mtanswill3@dedecms.com	Sunday
154		1998-05-24	mtanswill3@dedecms.com	Sunday
329		1998-05-24	mtanswill3@dedecms.com	Sunday
79		1998-05-24	mtanswill3@dedecms.com	Sunday
354		1998-05-24	mtanswill3@dedecms.com	Sunday
179		1998-05-24	mtanswill3@dedecms.com	Sunday
379		1998-05-24	mtanswill3@dedecms.com	Sunday
387		1983-05-26	uglayzerb@pinterest.com	Thursday
12		1983-05-26	uglayzerb@pinterest.com	Thursday
37		1983-05-26	uglayzerb@pinterest.com	Thursday
212		1983-05-26	uglayzerb@pinterest.com	Thursday
87		1983-05-26	uglayzerb@pinterest.com	Thursday
112		1983-05-26	uglayzerb@pinterest.com	Thursday
312		1983-05-26	uglayzerb@pinterest.com	Thursday
237		1983-05-26	uglayzerb@pinterest.com	Thursday
187		1983-05-26	uglayzerb@pinterest.com	Thursday
62		1983-05-26	uglayzerb@pinterest.com	Thursday
162		1983-05-26	uglayzerb@pinterest.com	Thursday
262		1983-05-26	uglayzerb@pinterest.com	Thursday
362		1983-05-26	uglayzerb@pinterest.com	Thursday
137		1983-05-26	uglayzerb@pinterest.com	Thursday
337		1983-05-26	uglayzerb@pinterest.com	Thursday
287		1983-05-26	uglayzerb@pinterest.com	Thursday
251		1973-05-31	gbode0@imgur.com	Thursday
2		2003-05-31	lgisbey1@mail.ru	Saturday
26		1973-05-31	gbode0@imgur.com	Thursday
27		2003-05-31	lgisbey1@mail.ru	Saturday
51		1973-05-31	gbode0@imgur.com	Thursday
52		2003-05-31	lgisbey1@mail.ru	Saturday
76		1973-05-31	gbode0@imgur.com	Thursday
77		2003-05-31	lgisbey1@mail.ru	Saturday
101		1973-05-31	gbode0@imgur.com	Thursday
102		2003-05-31	lgisbey1@mail.ru	Saturday
126		1973-05-31	gbode0@imgur.com	Thursday
127		2003-05-31	lgisbey1@mail.ru	Saturday
151		1973-05-31	gbode0@imgur.com	Thursday
152		2003-05-31	lgisbey1@mail.ru	Saturday
176		1973-05-31	gbode0@imgur.com	Thursday
177		2003-05-31	lgisbey1@mail.ru	Saturday
201		1973-05-31	gbode0@imgur.com	Thursday
202		2003-05-31	lgisbey1@mail.ru	Saturday
226		1973-05-31	gbode0@imgur.com	Thursday
227		2003-05-31	lgisbey1@mail.ru	Saturday
1		1973-05-31	gbode0@imgur.com	Thursday
252		2003-05-31	lgisbey1@mail.ru	Saturday
276		1973-05-31	gbode0@imgur.com	Thursday
277		2003-05-31	lgisbey1@mail.ru	Saturday
301		1973-05-31	gbode0@imgur.com	Thursday
302		2003-05-31	lgisbey1@mail.ru	Saturday
326		1973-05-31	gbode0@imgur.com	Thursday
327		2003-05-31	lgisbey1@mail.ru	Saturday
351		1973-05-31	gbode0@imgur.com	Thursday
352		2003-05-31	lgisbey1@mail.ru	Saturday
376		1973-05-31	gbode0@imgur.com	Thursday
377		2003-05-31	lgisbey1@mail.ru	Saturday
Conexión PostgreSQL cerrada

Obtenga los nombres e ids de correo electrónico de los usuarios añadidos en el año 2019.#

import psycopg2
from psycopg2 import Error

try:
    # Establecer la conexión con la base de datos
    connection = psycopg2.connect(user="myname_user",
                                  password="password",
                                  host="localhost",
                                  port="5432",
                                  database="myname_db")
    cursor = connection.cursor()

    # Consulta SQL
    sql_query = """
    SELECT user_id,
           UPPER(user_first_name || ' ' || user_last_name) AS user_name,
           user_email_id,
           created_ts,
           EXTRACT(YEAR FROM created_ts) AS created_year
    FROM users
    WHERE EXTRACT(YEAR FROM created_ts) = 2019
    ORDER BY UPPER(user_first_name || ' ' || user_last_name);
    """

    # Ejecutar la consulta
    cursor.execute(sql_query)

    # Obtener los resultados
    results = cursor.fetchall()

    # Imprimir los resultados
    print("ID de Usuario\t\tNombre de Usuario\t\tCorreo Electrónico\t\tFecha de Creación\t\tAño de Creación")
    print("------------------------------------------------------------------------------------------------------------------")
    for row in results:
        print(f"{row[0]}\t\t{row[1]}\t\t{row[2]}\t{row[3]}\t{int(row[4])}")

except (Exception, psycopg2.Error) as error:
    print("Error al conectar a PostgreSQL:", error)

finally:
    if connection:
        cursor.close()
        connection.close()
        print("Conexión PostgreSQL cerrada")
ID de Usuario		Nombre de Usuario		Correo Electrónico		Fecha de Creación		Año de Creación
------------------------------------------------------------------------------------------------------------------
108		CYBIL LISSIMORE		clissimore7@pinterest.com	2019-12-09 14:08:30	2019
33		CYBIL LISSIMORE		clissimore7@pinterest.com	2019-12-09 14:08:30	2019
58		CYBIL LISSIMORE		clissimore7@pinterest.com	2019-12-09 14:08:30	2019
83		CYBIL LISSIMORE		clissimore7@pinterest.com	2019-12-09 14:08:30	2019
8		CYBIL LISSIMORE		clissimore7@pinterest.com	2019-12-09 14:08:30	2019
133		CYBIL LISSIMORE		clissimore7@pinterest.com	2019-12-09 14:08:30	2019
158		CYBIL LISSIMORE		clissimore7@pinterest.com	2019-12-09 14:08:30	2019
183		CYBIL LISSIMORE		clissimore7@pinterest.com	2019-12-09 14:08:30	2019
208		CYBIL LISSIMORE		clissimore7@pinterest.com	2019-12-09 14:08:30	2019
233		CYBIL LISSIMORE		clissimore7@pinterest.com	2019-12-09 14:08:30	2019
258		CYBIL LISSIMORE		clissimore7@pinterest.com	2019-12-09 14:08:30	2019
283		CYBIL LISSIMORE		clissimore7@pinterest.com	2019-12-09 14:08:30	2019
308		CYBIL LISSIMORE		clissimore7@pinterest.com	2019-12-09 14:08:30	2019
333		CYBIL LISSIMORE		clissimore7@pinterest.com	2019-12-09 14:08:30	2019
358		CYBIL LISSIMORE		clissimore7@pinterest.com	2019-12-09 14:08:30	2019
383		CYBIL LISSIMORE		clissimore7@pinterest.com	2019-12-09 14:08:30	2019
400		PHYLYS ASLIE		paslieo@qq.com	2019-10-01 01:34:28	2019
325		PHYLYS ASLIE		paslieo@qq.com	2019-10-01 01:34:28	2019
300		PHYLYS ASLIE		paslieo@qq.com	2019-10-01 01:34:28	2019
225		PHYLYS ASLIE		paslieo@qq.com	2019-10-01 01:34:28	2019
150		PHYLYS ASLIE		paslieo@qq.com	2019-10-01 01:34:28	2019
75		PHYLYS ASLIE		paslieo@qq.com	2019-10-01 01:34:28	2019
375		PHYLYS ASLIE		paslieo@qq.com	2019-10-01 01:34:28	2019
250		PHYLYS ASLIE		paslieo@qq.com	2019-10-01 01:34:28	2019
275		PHYLYS ASLIE		paslieo@qq.com	2019-10-01 01:34:28	2019
100		PHYLYS ASLIE		paslieo@qq.com	2019-10-01 01:34:28	2019
50		PHYLYS ASLIE		paslieo@qq.com	2019-10-01 01:34:28	2019
175		PHYLYS ASLIE		paslieo@qq.com	2019-10-01 01:34:28	2019
350		PHYLYS ASLIE		paslieo@qq.com	2019-10-01 01:34:28	2019
125		PHYLYS ASLIE		paslieo@qq.com	2019-10-01 01:34:28	2019
25		PHYLYS ASLIE		paslieo@qq.com	2019-10-01 01:34:28	2019
200		PHYLYS ASLIE		paslieo@qq.com	2019-10-01 01:34:28	2019
387		UNA GLAYZER		uglayzerb@pinterest.com	2019-09-17 03:24:21	2019
112		UNA GLAYZER		uglayzerb@pinterest.com	2019-09-17 03:24:21	2019
337		UNA GLAYZER		uglayzerb@pinterest.com	2019-09-17 03:24:21	2019
137		UNA GLAYZER		uglayzerb@pinterest.com	2019-09-17 03:24:21	2019
162		UNA GLAYZER		uglayzerb@pinterest.com	2019-09-17 03:24:21	2019
187		UNA GLAYZER		uglayzerb@pinterest.com	2019-09-17 03:24:21	2019
212		UNA GLAYZER		uglayzerb@pinterest.com	2019-09-17 03:24:21	2019
362		UNA GLAYZER		uglayzerb@pinterest.com	2019-09-17 03:24:21	2019
237		UNA GLAYZER		uglayzerb@pinterest.com	2019-09-17 03:24:21	2019
262		UNA GLAYZER		uglayzerb@pinterest.com	2019-09-17 03:24:21	2019
287		UNA GLAYZER		uglayzerb@pinterest.com	2019-09-17 03:24:21	2019
12		UNA GLAYZER		uglayzerb@pinterest.com	2019-09-17 03:24:21	2019
312		UNA GLAYZER		uglayzerb@pinterest.com	2019-09-17 03:24:21	2019
37		UNA GLAYZER		uglayzerb@pinterest.com	2019-09-17 03:24:21	2019
62		UNA GLAYZER		uglayzerb@pinterest.com	2019-09-17 03:24:21	2019
87		UNA GLAYZER		uglayzerb@pinterest.com	2019-09-17 03:24:21	2019
392		YANKEE JELF		yjelfg@wufoo.com	2019-09-16 16:09:12	2019
342		YANKEE JELF		yjelfg@wufoo.com	2019-09-16 16:09:12	2019
17		YANKEE JELF		yjelfg@wufoo.com	2019-09-16 16:09:12	2019
192		YANKEE JELF		yjelfg@wufoo.com	2019-09-16 16:09:12	2019
142		YANKEE JELF		yjelfg@wufoo.com	2019-09-16 16:09:12	2019
117		YANKEE JELF		yjelfg@wufoo.com	2019-09-16 16:09:12	2019
42		YANKEE JELF		yjelfg@wufoo.com	2019-09-16 16:09:12	2019
167		YANKEE JELF		yjelfg@wufoo.com	2019-09-16 16:09:12	2019
317		YANKEE JELF		yjelfg@wufoo.com	2019-09-16 16:09:12	2019
92		YANKEE JELF		yjelfg@wufoo.com	2019-09-16 16:09:12	2019
267		YANKEE JELF		yjelfg@wufoo.com	2019-09-16 16:09:12	2019
367		YANKEE JELF		yjelfg@wufoo.com	2019-09-16 16:09:12	2019
242		YANKEE JELF		yjelfg@wufoo.com	2019-09-16 16:09:12	2019
67		YANKEE JELF		yjelfg@wufoo.com	2019-09-16 16:09:12	2019
292		YANKEE JELF		yjelfg@wufoo.com	2019-09-16 16:09:12	2019
217		YANKEE JELF		yjelfg@wufoo.com	2019-09-16 16:09:12	2019
Conexión PostgreSQL cerrada

Obtenga el número de usuarios por género. Utilice la tabla de users para este ejercicio.#

import psycopg2
from psycopg2 import Error

try:
    # Establecer la conexión con la base de datos
    connection = psycopg2.connect(user="myname_user",
                                  password="password",
                                  host="localhost",
                                  port="5432",
                                  database="myname_db")
    cursor = connection.cursor()

    # Consulta SQL
    sql_query = """
    SELECT
        CASE
            WHEN user_gender = 'M' THEN 'Male'
            WHEN user_gender = 'F' THEN 'Female'
            ELSE 'Not Specified'
        END AS gender,
        COUNT(*) AS user_count
    FROM
        users
    GROUP BY
        user_gender
    ORDER BY
        user_count DESC;
    """

    # Ejecutar la consulta
    cursor.execute(sql_query)

    # Obtener los resultados
    results = cursor.fetchall()

    # Imprimir los resultados
    print("Género\t\t\t\t\tNúmero de Usuarios")
    print("-----------------------------------------")
    for row in results:
        print(f"{row[0]}\t\t\t\t\t{row[1]}")

except (Exception, psycopg2.Error) as error:
    print("Error al conectar a PostgreSQL:", error)

finally:
    if connection:
        cursor.close()
        connection.close()
        print("Conexión PostgreSQL cerrada")
Género					Número de Usuarios
-----------------------------------------
Female					208
Male					160
Not Specified					32
Conexión PostgreSQL cerrada

Obtenga los 4 últimos dígitos de los ids únicos.#

import psycopg2
from psycopg2 import Error

try:
    # Establecer la conexión con la base de datos
    connection = psycopg2.connect(user="myname_user",
                                  password="password",
                                  host="localhost",
                                  port="5432",
                                  database="myname_db")
    cursor = connection.cursor()

    # Consulta SQL
    sql_query = """
    SELECT 
        user_id,
        COALESCE(user_unique_id, 'Not Specified') AS user_unique_id,
        CASE 
            WHEN user_unique_id IS NULL THEN 'Not Specified'
            WHEN LENGTH(REPLACE(user_unique_id, '-', '')) < 9 THEN 'Invalid Unique Id'
            ELSE SUBSTRING(REPLACE(user_unique_id, '-', ''), -4)
        END AS user_unique_id_last4
    FROM 
        users
    ORDER BY 
        user_id;
    """

    # Ejecutar la consulta
    cursor.execute(sql_query)

    # Obtener los resultados
    results = cursor.fetchall()

    # Imprimir los resultados
    print("ID de Usuario\tID Único\tÚltimos 4 Dígitos del ID Único")
    print("--------------------------------------------------------------")
    for row in results:
        print(f"{row[0]}\t\t{row[1]}\t\t{row[2]}")

except (Exception, psycopg2.Error) as error:
    print("Error al conectar a PostgreSQL:", error)

finally:
    if connection:
        cursor.close()
        connection.close()
        print("Conexión PostgreSQL cerrada")
ID de Usuario	ID Único	Últimos 4 Dígitos del ID Único
--------------------------------------------------------------
1		88833-8759		888338759
2		262501-029		262501029
3		391-33-2823		391332823
4		1195413-80		119541380
5		471-24-6869		471246869
6		192374-933		192374933
7		749-27-47-52		749274752
8		461-75-4198		461754198
9		892-36-676-2		892366762
10		197-54-1646		197541646
11		232-55-52-58		232555258
12		898-84-336-6		898843366
13		247-95-68-44		247956844
14		415-48-894-3		415488943
15		403-39-5-869		403395869
16		399-83-05-03		399830503
17		607-99-0411		607990411
18		430-01-578-5		430015785
19		571-09-6181		571096181
20		478-32-02-87		478320287
21		Not Specified		Not Specified
22		Not Specified		Not Specified
23		830-40-5287		830405287
24		778-0845		Invalid Unique Id
25		368-44-4478		368444478
26		88833-8759		888338759
27		262501-029		262501029
28		391-33-2823		391332823
29		1195413-80		119541380
30		471-24-6869		471246869
31		192374-933		192374933
32		749-27-47-52		749274752
33		461-75-4198		461754198
34		892-36-676-2		892366762
35		197-54-1646		197541646
36		232-55-52-58		232555258
37		898-84-336-6		898843366
38		247-95-68-44		247956844
39		415-48-894-3		415488943
40		403-39-5-869		403395869
41		399-83-05-03		399830503
42		607-99-0411		607990411
43		430-01-578-5		430015785
44		571-09-6181		571096181
45		478-32-02-87		478320287
46		Not Specified		Not Specified
47		Not Specified		Not Specified
48		830-40-5287		830405287
49		778-0845		Invalid Unique Id
50		368-44-4478		368444478
51		88833-8759		888338759
52		262501-029		262501029
53		391-33-2823		391332823
54		1195413-80		119541380
55		471-24-6869		471246869
56		192374-933		192374933
57		749-27-47-52		749274752
58		461-75-4198		461754198
59		892-36-676-2		892366762
60		197-54-1646		197541646
61		232-55-52-58		232555258
62		898-84-336-6		898843366
63		247-95-68-44		247956844
64		415-48-894-3		415488943
65		403-39-5-869		403395869
66		399-83-05-03		399830503
67		607-99-0411		607990411
68		430-01-578-5		430015785
69		571-09-6181		571096181
70		478-32-02-87		478320287
71		Not Specified		Not Specified
72		Not Specified		Not Specified
73		830-40-5287		830405287
74		778-0845		Invalid Unique Id
75		368-44-4478		368444478
76		88833-8759		888338759
77		262501-029		262501029
78		391-33-2823		391332823
79		1195413-80		119541380
80		471-24-6869		471246869
81		192374-933		192374933
82		749-27-47-52		749274752
83		461-75-4198		461754198
84		892-36-676-2		892366762
85		197-54-1646		197541646
86		232-55-52-58		232555258
87		898-84-336-6		898843366
88		247-95-68-44		247956844
89		415-48-894-3		415488943
90		403-39-5-869		403395869
91		399-83-05-03		399830503
92		607-99-0411		607990411
93		430-01-578-5		430015785
94		571-09-6181		571096181
95		478-32-02-87		478320287
96		Not Specified		Not Specified
97		Not Specified		Not Specified
98		830-40-5287		830405287
99		778-0845		Invalid Unique Id
100		368-44-4478		368444478
101		88833-8759		888338759
102		262501-029		262501029
103		391-33-2823		391332823
104		1195413-80		119541380
105		471-24-6869		471246869
106		192374-933		192374933
107		749-27-47-52		749274752
108		461-75-4198		461754198
109		892-36-676-2		892366762
110		197-54-1646		197541646
111		232-55-52-58		232555258
112		898-84-336-6		898843366
113		247-95-68-44		247956844
114		415-48-894-3		415488943
115		403-39-5-869		403395869
116		399-83-05-03		399830503
117		607-99-0411		607990411
118		430-01-578-5		430015785
119		571-09-6181		571096181
120		478-32-02-87		478320287
121		Not Specified		Not Specified
122		Not Specified		Not Specified
123		830-40-5287		830405287
124		778-0845		Invalid Unique Id
125		368-44-4478		368444478
126		88833-8759		888338759
127		262501-029		262501029
128		391-33-2823		391332823
129		1195413-80		119541380
130		471-24-6869		471246869
131		192374-933		192374933
132		749-27-47-52		749274752
133		461-75-4198		461754198
134		892-36-676-2		892366762
135		197-54-1646		197541646
136		232-55-52-58		232555258
137		898-84-336-6		898843366
138		247-95-68-44		247956844
139		415-48-894-3		415488943
140		403-39-5-869		403395869
141		399-83-05-03		399830503
142		607-99-0411		607990411
143		430-01-578-5		430015785
144		571-09-6181		571096181
145		478-32-02-87		478320287
146		Not Specified		Not Specified
147		Not Specified		Not Specified
148		830-40-5287		830405287
149		778-0845		Invalid Unique Id
150		368-44-4478		368444478
151		88833-8759		888338759
152		262501-029		262501029
153		391-33-2823		391332823
154		1195413-80		119541380
155		471-24-6869		471246869
156		192374-933		192374933
157		749-27-47-52		749274752
158		461-75-4198		461754198
159		892-36-676-2		892366762
160		197-54-1646		197541646
161		232-55-52-58		232555258
162		898-84-336-6		898843366
163		247-95-68-44		247956844
164		415-48-894-3		415488943
165		403-39-5-869		403395869
166		399-83-05-03		399830503
167		607-99-0411		607990411
168		430-01-578-5		430015785
169		571-09-6181		571096181
170		478-32-02-87		478320287
171		Not Specified		Not Specified
172		Not Specified		Not Specified
173		830-40-5287		830405287
174		778-0845		Invalid Unique Id
175		368-44-4478		368444478
176		88833-8759		888338759
177		262501-029		262501029
178		391-33-2823		391332823
179		1195413-80		119541380
180		471-24-6869		471246869
181		192374-933		192374933
182		749-27-47-52		749274752
183		461-75-4198		461754198
184		892-36-676-2		892366762
185		197-54-1646		197541646
186		232-55-52-58		232555258
187		898-84-336-6		898843366
188		247-95-68-44		247956844
189		415-48-894-3		415488943
190		403-39-5-869		403395869
191		399-83-05-03		399830503
192		607-99-0411		607990411
193		430-01-578-5		430015785
194		571-09-6181		571096181
195		478-32-02-87		478320287
196		Not Specified		Not Specified
197		Not Specified		Not Specified
198		830-40-5287		830405287
199		778-0845		Invalid Unique Id
200		368-44-4478		368444478
201		88833-8759		888338759
202		262501-029		262501029
203		391-33-2823		391332823
204		1195413-80		119541380
205		471-24-6869		471246869
206		192374-933		192374933
207		749-27-47-52		749274752
208		461-75-4198		461754198
209		892-36-676-2		892366762
210		197-54-1646		197541646
211		232-55-52-58		232555258
212		898-84-336-6		898843366
213		247-95-68-44		247956844
214		415-48-894-3		415488943
215		403-39-5-869		403395869
216		399-83-05-03		399830503
217		607-99-0411		607990411
218		430-01-578-5		430015785
219		571-09-6181		571096181
220		478-32-02-87		478320287
221		Not Specified		Not Specified
222		Not Specified		Not Specified
223		830-40-5287		830405287
224		778-0845		Invalid Unique Id
225		368-44-4478		368444478
226		88833-8759		888338759
227		262501-029		262501029
228		391-33-2823		391332823
229		1195413-80		119541380
230		471-24-6869		471246869
231		192374-933		192374933
232		749-27-47-52		749274752
233		461-75-4198		461754198
234		892-36-676-2		892366762
235		197-54-1646		197541646
236		232-55-52-58		232555258
237		898-84-336-6		898843366
238		247-95-68-44		247956844
239		415-48-894-3		415488943
240		403-39-5-869		403395869
241		399-83-05-03		399830503
242		607-99-0411		607990411
243		430-01-578-5		430015785
244		571-09-6181		571096181
245		478-32-02-87		478320287
246		Not Specified		Not Specified
247		Not Specified		Not Specified
248		830-40-5287		830405287
249		778-0845		Invalid Unique Id
250		368-44-4478		368444478
251		88833-8759		888338759
252		262501-029		262501029
253		391-33-2823		391332823
254		1195413-80		119541380
255		471-24-6869		471246869
256		192374-933		192374933
257		749-27-47-52		749274752
258		461-75-4198		461754198
259		892-36-676-2		892366762
260		197-54-1646		197541646
261		232-55-52-58		232555258
262		898-84-336-6		898843366
263		247-95-68-44		247956844
264		415-48-894-3		415488943
265		403-39-5-869		403395869
266		399-83-05-03		399830503
267		607-99-0411		607990411
268		430-01-578-5		430015785
269		571-09-6181		571096181
270		478-32-02-87		478320287
271		Not Specified		Not Specified
272		Not Specified		Not Specified
273		830-40-5287		830405287
274		778-0845		Invalid Unique Id
275		368-44-4478		368444478
276		88833-8759		888338759
277		262501-029		262501029
278		391-33-2823		391332823
279		1195413-80		119541380
280		471-24-6869		471246869
281		192374-933		192374933
282		749-27-47-52		749274752
283		461-75-4198		461754198
284		892-36-676-2		892366762
285		197-54-1646		197541646
286		232-55-52-58		232555258
287		898-84-336-6		898843366
288		247-95-68-44		247956844
289		415-48-894-3		415488943
290		403-39-5-869		403395869
291		399-83-05-03		399830503
292		607-99-0411		607990411
293		430-01-578-5		430015785
294		571-09-6181		571096181
295		478-32-02-87		478320287
296		Not Specified		Not Specified
297		Not Specified		Not Specified
298		830-40-5287		830405287
299		778-0845		Invalid Unique Id
300		368-44-4478		368444478
301		88833-8759		888338759
302		262501-029		262501029
303		391-33-2823		391332823
304		1195413-80		119541380
305		471-24-6869		471246869
306		192374-933		192374933
307		749-27-47-52		749274752
308		461-75-4198		461754198
309		892-36-676-2		892366762
310		197-54-1646		197541646
311		232-55-52-58		232555258
312		898-84-336-6		898843366
313		247-95-68-44		247956844
314		415-48-894-3		415488943
315		403-39-5-869		403395869
316		399-83-05-03		399830503
317		607-99-0411		607990411
318		430-01-578-5		430015785
319		571-09-6181		571096181
320		478-32-02-87		478320287
321		Not Specified		Not Specified
322		Not Specified		Not Specified
323		830-40-5287		830405287
324		778-0845		Invalid Unique Id
325		368-44-4478		368444478
326		88833-8759		888338759
327		262501-029		262501029
328		391-33-2823		391332823
329		1195413-80		119541380
330		471-24-6869		471246869
331		192374-933		192374933
332		749-27-47-52		749274752
333		461-75-4198		461754198
334		892-36-676-2		892366762
335		197-54-1646		197541646
336		232-55-52-58		232555258
337		898-84-336-6		898843366
338		247-95-68-44		247956844
339		415-48-894-3		415488943
340		403-39-5-869		403395869
341		399-83-05-03		399830503
342		607-99-0411		607990411
343		430-01-578-5		430015785
344		571-09-6181		571096181
345		478-32-02-87		478320287
346		Not Specified		Not Specified
347		Not Specified		Not Specified
348		830-40-5287		830405287
349		778-0845		Invalid Unique Id
350		368-44-4478		368444478
351		88833-8759		888338759
352		262501-029		262501029
353		391-33-2823		391332823
354		1195413-80		119541380
355		471-24-6869		471246869
356		192374-933		192374933
357		749-27-47-52		749274752
358		461-75-4198		461754198
359		892-36-676-2		892366762
360		197-54-1646		197541646
361		232-55-52-58		232555258
362		898-84-336-6		898843366
363		247-95-68-44		247956844
364		415-48-894-3		415488943
365		403-39-5-869		403395869
366		399-83-05-03		399830503
367		607-99-0411		607990411
368		430-01-578-5		430015785
369		571-09-6181		571096181
370		478-32-02-87		478320287
371		Not Specified		Not Specified
372		Not Specified		Not Specified
373		830-40-5287		830405287
374		778-0845		Invalid Unique Id
375		368-44-4478		368444478
376		88833-8759		888338759
377		262501-029		262501029
378		391-33-2823		391332823
379		1195413-80		119541380
380		471-24-6869		471246869
381		192374-933		192374933
382		749-27-47-52		749274752
383		461-75-4198		461754198
384		892-36-676-2		892366762
385		197-54-1646		197541646
386		232-55-52-58		232555258
387		898-84-336-6		898843366
388		247-95-68-44		247956844
389		415-48-894-3		415488943
390		403-39-5-869		403395869
391		399-83-05-03		399830503
392		607-99-0411		607990411
393		430-01-578-5		430015785
394		571-09-6181		571096181
395		478-32-02-87		478320287
396		Not Specified		Not Specified
397		Not Specified		Not Specified
398		830-40-5287		830405287
399		778-0845		Invalid Unique Id
400		368-44-4478		368444478
Conexión PostgreSQL cerrada

Obtenga el recuento de usuarios en función del código de país.#

import psycopg2
from psycopg2 import Error

try:
    # Establecer la conexión con la base de datos
    connection = psycopg2.connect(user="myname_user",
                                  password="password",
                                  host="localhost",
                                  port="5432",
                                  database="myname_db")
    cursor = connection.cursor()

    # Consulta SQL c
    sql_query = """
    SELECT 
        LEFT(SUBSTRING(REGEXP_REPLACE(user_phone_no, '[^0-9]', ''), 1, 3), 2) AS country_code,
        COUNT(*) AS user_count
    FROM 
        users
    WHERE 
        user_phone_no IS NOT NULL
    GROUP BY 
        country_code
    ORDER BY 
        LEFT(SUBSTRING(REGEXP_REPLACE(user_phone_no, '[^0-9]', ''), 1, 3), 2) ASC;
    """

    # Ejecutar la consulta
    cursor.execute(sql_query)

    # Obtener los resultados
    results = cursor.fetchall()

    # Imprimir los resultados
    print("Código de País\t\tRecuento de Usuarios")
    print("----------------------------------------")
    for row in results:
        print(f"{row[0]}\t\t\t{row[1]}")

except (Exception, psycopg2.Error) as error:
    print("Error al conectar a PostgreSQL:", error)

finally:
    if connection:
        cursor.close()
        connection.close()
        print("Conexión PostgreSQL cerrada")
Código de País		Recuento de Usuarios
----------------------------------------
1 			16
22			16
24			16
35			16
37			16
38			16
42			16
48			16
54			16
55			16
59			16
62			48
63			16
7 			32
81			16
84			16
86			64
Conexión PostgreSQL cerrada